﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
using System.Web.Http;
using TccServicos.Models;
using TccServicos.Util;

namespace TccServicos.Controllers
{
    public class PessoaNotificacaoController : ApiController
    {
        private string sThread = "";

        [HttpPost]
        public RetornoServico EnviaNotificacao(NotificacaoPayload notificacao)
        {
            sThread = Util.Util.NextHex(4);
            string nomeFuncao = string.Format("{0} [{1}]", "EnviaNotificacao", sThread);

            try
            {
                List<NotificacaoPayload> listaNotificacoes = new List<NotificacaoPayload>();

                using (adoteEntities contexto = new adoteEntities())
                {
                    List<Task> listaTarefas = new List<Task>();
                    
                    var consulta = (from t in contexto.CADASTRO_PESSOA.AsNoTracking()
                                    select new
                                    {
                                        token = t.TOKEN,
                                    }).ToList();
                    foreach (var item in consulta)
                    {
                        if (!string.IsNullOrEmpty(item.token))
                        {
                            string msg = "Um novo animal foi cadastrado, entre no app e confira";
                            if (notificacao != null && !string.IsNullOrEmpty(notificacao.mensagem))
                                msg = notificacao.mensagem;
                            //listaTarefas.Add(new Task(() => Negocio.PessoaNotificacao.SendNotification(item.token, "Um novo animal foi cadastrado no app, entre e confira")));
                            //new Negocio.Notificacao().SendNotification(item.token, "Um novo animal foi cadastrado no app, entre e confira");
                            listaNotificacoes.Add(new NotificacaoPayload() { token = item.token, mensagem = msg });
                        }
                    }

                    /*
                    foreach (var item in listaTarefas)
                    {
                        item.Start();
                    }

                    if (listaTarefas.Count > 0)
                        Task.WaitAll(listaTarefas.ToArray());
                    
                    return Util.Util.RetornoOk();
                    */
                }

                foreach (var item in listaNotificacoes)
                {
                    new Negocio.Notificacao().SendNotification(item.token, item.mensagem, (item.token != "6db992177e09945a004f9ef57a660e546fb2e37b1cd3d670769591af2ef2cef3" ? true : false));
                }

                NotificacaoPersonalizadaController np = new NotificacaoPersonalizadaController();
                np.EnviaNotificacao(new NotificacaoPayload() 
                {
                    token = null,
                    mensagem = "",
                });

                return Util.Util.RetornoOk();
            }
            catch (Exception ex)
            {
                Log.GravarLog(string.Format("{0} Erro: {1}", nomeFuncao, ex.ToString()));
                return Util.Util.RetornoErro(ex.ToString());
            }
        }
    }
}
